<?php

/**
* Class này phục vụ việc lấy mã CRC cho một ActiveRecord cụ thể. Thuật toán lấy như sau :
* 	1. ActiveRecord sẽ cấu hình một danh sách các field quan trọng mà sẽ lấy CRC trên đó {@link $crcFields}
* 	2. ActiveRecord sẽ cấu hình một mã bí mật để lấy CRC {@link $crcSecretKey}
* 	3. Các field quan trọng sẽ được ghép lại thành 1 xâu theo thứ tự config, sau đó ghép thêm mã bí mật vào cuối và lấy mã băm theo thuật toán md5
* 
* @property string[] $crcFields danh sách các field quan trọng của AR
* @property string $crc giá trị mã CRC
* @property string $crcFieldName         
* @property string $crcSecretKey mã bí mật để lấy tạo ra CRC
* 
* @author Tarzan <hocdt85@gmail.com>
*/
class ActiveRecordCRCBehavior extends CActiveRecordBehavior
{
	private $_crc = null;
	
	/**
	* get CRC of the current object
	* 
	* @return string
	*/
	function getCrc()
	{
		if (!isset($this->_crc)) {
			$value = '';
			foreach ($this->getOwner()->crcFields as $field) $value .= $this->getOwner()->$field;
			$value .= $this->getOwner()->crcSecretKey;
			
			$this->_crc = md5($value);
		}
		
		return $this->_crc;
	}
	
	/**
	* clear current value of the crc
	* 
	*/
	protected function resetCrc()
	{
		unset($this->_crc);
	}
	
}